tomcat根据繁忙线程数对keepalive进行动态调整

您所在的位置:网站首页 keepalive 原理 tomcat根据繁忙线程数对keepalive进行动态调整

tomcat根据繁忙线程数对keepalive进行动态调整

#tomcat根据繁忙线程数对keepalive进行动态调整| 来源: 网络整理| 查看: 265

众所周知,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。我们经常所用的tomcat服务器就支持HTTP Keep-Alive。在http1.1中,keepalive默认是开启的。如果需要自定义配置keepalive参数,我们可以在tomcat的server.xml中做如下配置:

              maxThreads="600"               minSpareThreads="100"               acceptCount="700"

                                        maxConnections="300" //与tomcat建立的最大socket连接数               connectionTimeout="20000"

                                        maxKeppAliveRequests="100"  //请求个数超过这个数,强制关闭掉socket链接

                                        keepAliveTimeOut="60000"  //下次请求过来之前,socket链接保持多久               redirectPort="8443"                URIEncoding="utf-8"

  />

但是tomcat在实际处理请求的过程中会根据工作线程池中繁忙线程数动态的对keepalive进行开启或者关闭,tomcat源码如下:

在org.apache.coyote.http11.AbstractHttp11Processor这个类的process方法中可以看到

会通过disableKeepAlive这个函数判断,我们再来看看disableKeepAlive这个函数,如下:

通过代码会算出 繁忙线程数/最大线程数的比例,即threadRatio = (threadsBusy * 100) / maxThreads; 接着看getDisableKeepAlivePercentage这个函数

可以看出,如果繁忙线程数/最大线程数 >75%,那么就会主动将keepalive关掉。

 

实际上这种自动调节措施也是一种防护措施,当客户端并发量比较大的时候,如果一致保持长连接,实际上是很耗服务端资源的,会严重影响性能,所以这里tomcat会动态的根据繁忙线程数来决定是否使用keepalive。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3